# 1、导入langchain的model模型的一个类
from lib2to3.fixes.fix_input import context

from langchain_openai import ChatOpenAI
from langchain import PromptTemplate
# 2、ChatOpenAI给我们提供了调用各种大模型的通用能力
import streamlit as st
import base64
def bm(problem):
    prop = PromptTemplate(
        input_variables=["context"],
        template="""你现在是一个AI智能助手，你的语气是贾维斯的语气，你的回答中不能带有任何的表情,其中用户的问题是{context}"""
    )
    bm = ChatOpenAI(
    # 1、模型的名字
    model="glm-4-0520",
    # 2、api_key
    api_key="f329dd27aec19d68aff2fe9feab29e6a.FmBng9a9FWUcG8gM",
    # 3、温度创新性 0-1
    temperature=0.1,
    # 4、接口的地址
    base_url="https://open.bigmodel.cn/api/paas/v4/"
    )

    chain = prop | bm
    result = chain.invoke({
        "context": problem,
    })
    return result.content


def create_model():
    llm = ChatOpenAI(
        # 1、模型的名字
        model="glm-4-0520",
        # 2、api_key
        api_key="f329dd27aec19d68aff2fe9feab29e6a.FmBng9a9FWUcG8gM",
        # 3、温度创新性 0-1
        temperature=0.9,
        # 4、接口的地址
        base_url="https://open.bigmodel.cn/api/paas/v4/"
    )
    return llm
# 直接使用大模型进行推理（直接让大模型回答问题）
def model_invoke(message):
    llm = create_model()
    result = llm.invoke(message)
    return result.content

def create_fanyi_prompt_chain():
    prop = PromptTemplate(
        input_variables=["context"],
        template="""
           你是一个专业的地理学家，只能回答和地理有关的问题，其他问题你都回答不知道。用户输入的问题是：{context}
        """
    )
    llm = create_model()
    chain = prop | llm
    return chain
# 通过langchain链实现结果的调用
def chain_invoke(message):
    chain = create_fanyi_prompt_chain()
    result = chain.invoke(message)
    return result.content

def page_config():

    left_column = st.sidebar
    left_column.title('系统设置')

    bt = left_column.button('AI百科问答助手')

    bt2 = left_column.button('AI聊天机器人')
    zhishiku = left_column.button('专属知识库')
    change = left_column.button('修改用户密码')
    quit = left_column.button('点击退出账号')
    if bt:
        st.switch_page("pages/chatbot.py")
    if bt2:
        st.switch_page("pages/goodfriend.py")
    if quit:
        st.switch_page("login.py")
    if change:
        st.switch_page("pages/change.py")
    if zhishiku:
        st.switch_page("pages/zhishiku.py")


def main_bg(main_bg):
    main_bg_ext = "png"
    st.markdown(
        f"""
         <style>
         .stApp {{
             background: url(data:image/{main_bg_ext};base64,{base64.b64encode(open(main_bg, "rb").read()).decode()});
             background-size: cover
         }}
         </style>
         """,
        unsafe_allow_html=True
    )



